// Dart 函数示例大全

// 1️⃣ 无返回值函数（void）
void greet(String name) {
  print("Hello, $name!");
}

// 2️⃣ 带返回值函数（指定类型）
int add(int a, int b) {
  return a + b;
}

// 3️⃣ 自动类型推断（未显式指定返回类型 → Dart 自动推断为 int）
subtract(a, b) {
  return a - b;
}

// 4️⃣ 显式返回 dynamic（可以返回任意类型）
dynamic randomResult(bool flag) {
  if (flag) {
    return "Dart is great!";
  } else {
    return 2025;
  }
}

// 5️⃣ 带可选命名参数
void printUser({String name = "Guest", int age = 18}) {
  print("User: $name, Age: $age");
}

// 6️⃣ 带可选位置参数
void describe(String name, [String? hobby]) {
  print("$name likes ${hobby ?? 'nothing special'}");
}

// 7️⃣ 箭头函数（简写）
int multiply(int a, int b) => a * b;

// 8️⃣ 匿名函数（lambda）
void runLambda() {
  var nums = [1, 2, 3];
  nums.forEach((n) => print("Number: $n"));
}

// 9️⃣ 高阶函数（函数作为参数）
void doOperation(int a, int b, int Function(int, int) operation) {
  var result = operation(a, b);
  print("Result: $result");
}

// 1️⃣0️⃣ 主函数 main 测试入口
void main(List<String> args) {
  greet("Sky");

  print("Add: ${add(3, 5)}");
  print("Subtract: ${subtract(10, 4)}");

  print("Random result: ${randomResult(true)}");
  print("Random result: ${randomResult(false)}");

  printUser(name: "Alice", age: 25);
  printUser(); // 使用默认参数

  describe("Bob", "coding");
  describe("Tom");

  print("Multiply: ${multiply(6, 7)}");

  runLambda();

  // 使用高阶函数
  doOperation(8, 2, add);
  doOperation(8, 2, (x, y) => x - y); // 直接传匿名函数
}
